package com.ruoyi.classes.service.impl;

import java.util.List;
import java.util.ListResourceBundle;
import java.util.Optional;

import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.ruoyi.classes.domain.Description;
import com.ruoyi.classes.mapper.DescriptionMapper;
import com.ruoyi.common.core.domain.R;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.classes.mapper.ClassesMapper;
import com.ruoyi.classes.domain.Classes;
import com.ruoyi.classes.service.IClassesService;

/**
 * 课程管理Service业务层处理
 * 
 * @author ruoyi
 * @date 2025-05-18
 */
@Service
public class ClassesServiceImpl extends ServiceImpl<ClassesMapper,Classes> implements IClassesService
{
    @Autowired
    private ClassesMapper classesMapper;

    @Autowired
    private DescriptionMapper descriptionMapper;

    /**
     * 查询课程管理
     * 
     * @param id 课程管理主键
     * @return 课程管理
     */
    @Override
    public Classes selectClassesById(Long id)
    {
//        再mysql中查询除了课程描述之外所以的数据
        Classes classes = classesMapper.selectClassesById(id);
        Optional<Description> description = descriptionMapper.findById(id);
//        Description description1 = description.get();
        Description description1 = description.orElse(new Description());
//        先获得对象，在获得数据
        classes.setDescription(description1.getDescription());
        return classes;
    }

    /**
     * 查询课程管理列表
     * 
     * @param classes 课程管理
     * @return 课程管理
     */
    @Override
    public List<Classes> selectClassesList(Classes classes)
    {
        List<Classes> classes1 = classesMapper.selectClassesList(classes);
        for (Classes classes2 : classes1) {
//            对于每一个id的遍历都进行添加描述
            Long id = classes2.getId();
            Optional<Description> description1 = descriptionMapper.findById(id);
//            解决optional对象为空的bug
//            orElse方法判断description是否为空，为空建立一个空对象吗，不为空，就get到description对象
            Description description = description1.orElse(new Description());
            classes2.setDescription(description.getDescription());
        }
        return classes1;
    }

    /**
     * 新增课程管理
     * 
     * @param classes 课程管理
     * @return 结果
     */
    @Override
    public int insertClasses(Classes classes)
    {
        int i = classesMapper.insertClasses(classes);
//        这里将除了课程描述之外的所以数据写入mysql
        if (i>0){
//            这里课程的id和description的id一样
            Description description = new Description();
            description.setId(classes.getId());
            description.setDescription(classes.getDescription());
            descriptionMapper.insert(description);
        }
        return i;
    }

    /**
     * 修改课程管理
     * 
     * @param classes 课程管理
     * @return 结果
     */
    @Override
    public int updateClasses(Classes classes)
    {
//        除了课程描述都更新了
        int i = classesMapper.updateClasses(classes);
        if (i>0){
            Description description1 = new Description();
            description1.setId(classes.getId());
            description1.setDescription(classes.getDescription());
            descriptionMapper.save(description1);
        }

        return i;
    }

    /**
     * 批量删除课程管理
     * 
     * @param ids 需要删除的课程管理主键
     * @return 结果
     */
    @Override
    public int deleteClassesByIds(Long[] ids)
    {
        int i = classesMapper.deleteClassesByIds(ids);
        if (i>0){
            for (Long id : ids) {
                descriptionMapper.deleteById(id);
            }
        }
        return i;
    }

    /**
     * 删除课程管理信息
     * 
     * @param id 课程管理主键
     * @return 结果
     */
    @Override
    public int deleteClassesById(Long id)
    {
//        删除除了课程描述之外的所以数据
        int i = classesMapper.deleteClassesById(id);
        if (i>0){
            descriptionMapper.deleteById(id);
        }
        return i;
    }

    @Override
    public List<Classes> selectClassesByTagsId(Long id) {
        List<Classes> classes = classesMapper.selectClassesByTagsId(id);
        return classes;
    }

    @Override
    public List<Classes> selectClassesByName(String text) {
        return  classesMapper.selectClassesByName(text);
    }

    @Override
    public List<Classes> RecommendList() {
        List<Classes> classes = classesMapper.RecommendList();
        for (Classes aClass : classes) {
            Long id = aClass.getId();
            Optional<Description> description = descriptionMapper.findById(id);
            Description description1 = description.orElse(new Description());
            aClass.setDescription(description1.getDescription());
        }
        return classes;
    }




}
